/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.talentos.bo;

import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.talentos.dao.DesligamentoDAO;
import br.uniceub.fsw.talentos.vo.DesligamentoVO;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * Business Object da entidade Talento. Essa classe é responsável por todos as
 * funcionalidades de negócio relacionadas à entidade.
 * 
 * @author Bruno Schifer Bernardi 2026545/5
 */
public class DesligamentoBO {

    DesligamentoDAO desligamentoDAO = new DesligamentoDAO();

    
    /**
     * Valida se já existe um registro de desligamento do Talento no Banco de Dados como verificação para inserção.
     * 
     * @param desligamento desligamento a ser verificado.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso o Desligamento informado não
     * corresponda a um talento válido ou o já havia Desligamento do Talento registrado no semestre atual.
     */
    public void validarVOUnico(DesligamentoVO desligamento) throws NegocioException {
        
        if(desligamento.getCodigoTalento() == null || desligamento.getCodigoTalento().intValue() == 0)
            throw new NegocioException("Nome do talento não foi informado");
        
        DesligamentoVO desligamentoExemplo = new DesligamentoVO();
        desligamentoExemplo.setIdentificadorDesligamento(desligamento.getIdentificadorDesligamento());
        
        List<DesligamentoVO> listaExemplo = desligamentoDAO.consultarPorExemplo(desligamentoExemplo);
        
        if(!listaExemplo.isEmpty()) {
            Calendar hoje = Calendar.getInstance();
            Date inicioSemestre = null;
            
            if(hoje.get(Calendar.MONTH) < Calendar.JULY) {
                inicioSemestre = new Date(hoje.get(Calendar.YEAR), 0, 1);
            } else {
                inicioSemestre = new Date(hoje.get(Calendar.YEAR), 6, 1);
            }
            
            for (int i=0;i<=listaExemplo.size();i++) {
                if (listaExemplo.get(i).getDataDesligamento().after(inicioSemestre))
                    throw new NegocioException("O Talento já foi desligado no semestre atual");
            }
        }
    }
}
